﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Presentacion.Vistas;

namespace Joel.Vishnu.SitioWeb
{
    public partial class Barrios : System.Web.UI.Page, IBarrios
    {
        #region Atributos

        private BarriosPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 BarrioId
        {
            get { return Convert.ToInt32(lblBarrioId.Text); }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
        }

        public EnumEstado Estado
        {
            get
            {
                if (lblEstado.Text == Convert.ToString((Int32)EnumEstadoId.NUEVO_ID))
                    return EnumEstado.NUEVO;
                if (lblEstado.Text == Convert.ToString((Int32)EnumEstadoId.MODIFICAR_ID))
                    return EnumEstado.MODIFICAR;
                if (lblEstado.Text == Convert.ToString((Int32)EnumEstadoId.ELIMINAR_ID))
                    return EnumEstado.ELIMINAR;
                return EnumEstado.ELIMINAR;
            }
        }

        public List<Barrio> ListaBarrios
        {
            set
            {
                grdBarrios.DataSource = value;
                grdBarrios.DataBind();
            }
        }

        #endregion

        #region Metodos

        private void HabilitarControles()
        {
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
            btnNuevo.Enabled = !btnNuevo.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;

            txtNombre.Enabled = !txtNombre.Enabled;

            grdBarrios.Enabled = !grdBarrios.Enabled;
        }

        private void LimpiarControles()
        {
            lblBarrioId.Text = String.Empty;
            txtNombre.Text = String.Empty;
            grdBarrios.SelectedIndex = -1;
        }

        private void ActualizarDatos()
        {
            txtNombre.Text = grdBarrios.SelectedRow.Cells[1].Text;
            lblBarrioId.Text = grdBarrios.SelectedRow.Cells[2].Text;
        }

        #endregion

        #region Eventos

        protected void Page_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador = new BarriosPresentador(this);
                if (!Page.IsPostBack)
                    presentador.Inicializar();
                lblErrores.Text = String.Empty;
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnNuevo_Click(Object sender, EventArgs e)
        {
            lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.NUEVO_ID);
            HabilitarControles();
            LimpiarControles();
        }

        protected void btnModificar_Click(Object sender, EventArgs e)
        {
            if (grdBarrios.SelectedRow != null)
            {
                if (lblBarrioId.Text != Convert.ToString((Int32)EnumBarrios.BARRIO_POR_DEFECTO))
                {
                    lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.MODIFICAR_ID);
                    HabilitarControles();
                }
                else
                    lblErrores.Text = "No puede modificar un barrio por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar un barrio.";
        }

        protected void btnEliminar_Click(Object sender, EventArgs e)
        {
            if (grdBarrios.SelectedRow != null)
            {
                if (lblBarrioId.Text != Convert.ToString((Int32)EnumBarrios.BARRIO_POR_DEFECTO))
                {
                    try
                    {
                        lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.ELIMINAR_ID);
                        presentador.Eliminar();
                        LimpiarControles();
                    }
                    catch (Exception ex)
                    {
                        lblErrores.Text = ex.Message;
                    }
                }
                else
                    lblErrores.Text = "No puede eliminar un barrio por defecto..";
            }
            else
                lblErrores.Text = "Debe seleccionar un barrio.";
        }

        protected void btnAceptar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
                LimpiarControles();
                switch (lblEstado.Text)
                {
                    case "0": //Nuevo
                        lblEstado.Text = "Barrio ingresado.";
                        break;
                    case "1": //Modificar
                        lblEstado.Text = "Barrio modificado.";
                        break;
                }
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnCancelar_Click(Object sender, EventArgs e)
        {
            HabilitarControles();
            LimpiarControles();
        }

        protected void grdBarrios_SelectedIndexChanged(Object sender, EventArgs e)
        {
            if (grdBarrios.SelectedIndex != -1) //TODO: A que se refiere con esto? Es para ver si no es nulo el indice?
                ActualizarDatos();
            else
                LimpiarControles();
        }

        #endregion
    }
}